﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using SlimDX.D3DCompiler;
using System.IO;

namespace System.Windows.Media.Media3D10
{
    /// <summary>
    /// Converti un <see cref="System.String"/> en <see cref="SlimDX.Direct3D10.Effect"/>, et inversement
    /// </summary>
    public sealed class EffectTypeConverter : UriTypeConverter
    {
        /// <summary>
        /// Convertit l'objet donné en objet du type de ce convertisseur, à l'aide du contexte et des informations de culture spécifiés. 
        /// </summary>
        /// <param name="context"><see cref="ITypeDescriptorContext"/> qui fournit un contexte de format.</param>
        /// <param name="culture"><see cref="Globalization.CultureInfo"/> à utiliser comme culture en cours.</param>
        /// <param name="value"><see cref="System.Object"/> à convertir.</param>
        /// <returns><see cref="System.Object"/> représentant la valeur convertie. </returns>
        public override object ConvertFrom(ITypeDescriptorContext context, Globalization.CultureInfo culture, object value)
        {
            Uri uri = (Uri)base.ConvertFrom(context, culture, value);
            SlimDX.Direct3D10.Effect effect = null;
            using (Stream stream = Application.GetResourceStream(uri).Stream)
            {
                effect = SlimDX.Direct3D10.Effect.FromStream(Engine.Device10, stream, "fx_4_0", ShaderFlags.None, EffectFlags.None);
            }
            return effect;   
        }
    }
}
